package com.pai4j.domain.vo.llm;

import com.alibaba.nacos.shaded.com.google.gson.annotations.SerializedName;

import java.util.List;
/**
 * 聊天请求
 * 用于构建向聊天模型发送的请求参数
 */
public class ChatCompletionRequest {

    /**
     * 模型名称，指定要使用的聊天模型
     */
    public String model;

    /**
     * 聊天消息列表，包含对话的历史消息和当前请求消息
     */
    public List<ChatCompletionMessage> messages;

    /**
     * 最大令牌数，限制模型生成回复的最大长度
     */
    @SerializedName("max_tokens")
    public int maxTokens;

    /**
     * 温度参数，控制生成文本的随机性，值越高随机性越强
     */
    @SerializedName("temperature")
    public float temperature;

    /**
     * 核采样参数，控制生成时考虑的词汇概率分布
     */
    public float topP;

    /**
     * 生成回复的数量，指定模型应返回多少个不同的回复
     */
    public Integer n;

    /**
     * 流式输出标志，true表示逐步返回结果，false表示一次性返回
     */
    public boolean stream;

    /**
     * 停止序列列表，指定生成过程中遇到这些序列时停止生成
     */
    public List<String> stop;

    /**
     * 存在惩罚参数，降低模型重复讨论已提及话题的倾向
     */
    @SerializedName("presence_penalty")
    public float presencePenalty;

    /**
     * 频率惩罚参数，降低模型重复使用相同词汇的倾向
     */
    @SerializedName("frequency_penalty")
    public float frequencyPenalty;

    /**
     * 用户标识符，用于区分不同用户的请求
     */
    public String user;

    /**
     * 获取聊天消息列表
     * @return 包含对话历史和当前请求的聊天消息列表
     */
    public List<ChatCompletionMessage> getMessages() {
        return messages;
    }

    /**
     * 构造函数，创建聊天完成请求对象
     * @param model 模型名称
     * @param messages 聊天消息列表
     * @param maxTokens 最大令牌数
     * @param temperature 温度参数
     * @param n 生成回复数量
     */
    public ChatCompletionRequest(String model, List<ChatCompletionMessage> messages, int maxTokens, float temperature, int n) {
        this.model = model;
        this.messages = messages;
        this.maxTokens = maxTokens;
        this.temperature = temperature;
        this.n = n;
    }
}

